#!/bin/bash

# ============================================
# AstrBot 一键部署脚本 (Linux/macOS)
# 功能：自动创建目录、下载配置文件并启动容器
# ============================================

set -e

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # 无颜色

echo -e "${GREEN}=====================================${NC}"
echo -e "${GREEN}   AstrBot 一键部署脚本 (Linux)${NC}"
echo -e "${GREEN}=====================================${NC}"

# 检查必要的命令
echo -e "${YELLOW}[1/5] 检查依赖工具...${NC}"
if ! command -v wget &> /dev/null && ! command -v curl &> /dev/null; then
    echo -e "${RED}错误：未找到 wget 或 curl 命令，请先安装其中之一${NC}"
    exit 1
fi

if ! command -v docker &> /dev/null; then
    echo -e "${RED}错误：未找到 docker 命令，请先安装 Docker${NC}"
    exit 1
fi

echo -e "${GREEN}✓ 依赖检查完成${NC}"

# 创建目录
echo -e "${YELLOW}[2/5] 创建 astrbot 目录...${NC}"
mkdir -p astrbot
echo -e "${GREEN}✓ 目录创建完成${NC}"

# 进入目录
cd astrbot
echo -e "${YELLOW}当前工作目录: $(pwd)${NC}"

# 下载配置文件
echo -e "${YELLOW}[3/5] 下载 astrbot.yml 配置文件...${NC}"
DOWNLOAD_URL="https://raw.githubusercontent.com/NapNeko/NapCat-Docker/main/compose/astrbot.yml"

if command -v wget &> /dev/null; then
    wget -O astrbot.yml "$DOWNLOAD_URL"
elif command -v curl &> /dev/null; then
    curl -L -o astrbot.yml "$DOWNLOAD_URL"
fi

if [ ! -f "astrbot.yml" ]; then
    echo -e "${RED}错误：配置文件下载失败${NC}"
    exit 1
fi

echo -e "${GREEN}✓ 配置文件下载完成${NC}"

# 检查是否需要 sudo
echo -e "${YELLOW}[4/5] 检查 Docker 权限...${NC}"
if docker ps &> /dev/null; then
    USE_SUDO=""
    echo -e "${GREEN}✓ 可直接使用 docker 命令${NC}"
else
    USE_SUDO="sudo"
    echo -e "${YELLOW}需要使用 sudo 执行 docker 命令${NC}"
fi

# 启动容器
echo -e "${YELLOW}[5/5] 启动 AstrBot 容器...${NC}"
$USE_SUDO docker compose -f astrbot.yml up -d

if [ $? -eq 0 ]; then
    echo -e "${GREEN}=====================================${NC}"
    echo -e "${GREEN}   AstrBot 部署成功！${NC}"
    echo -e "${GREEN}=====================================${NC}"
    echo ""
    
    # 等待容器启动
    echo -e "${YELLOW}正在等待容器启动...${NC}"
    sleep 3
    
    # 获取本机 IP 地址
    LOCAL_IP=$(hostname -I | awk '{print $1}')
    if [ -z "$LOCAL_IP" ]; then
        LOCAL_IP="localhost"
    fi
    
    echo -e "${GREEN}访问地址：${NC}"
    echo -e "${YELLOW}  - AstrBot WebUI:  ${NC}http://${LOCAL_IP}:6185"
    echo -e "${YELLOW}  - NapCat WebUI:   ${NC}http://${LOCAL_IP}:6099"
    echo ""
    
    # 尝试提取 NapCat WebUi Token
    echo -e "${YELLOW}正在获取 NapCat WebUi Token...${NC}"
    sleep 3
    
    # 使用更宽松的正则，匹配带时间戳的日志格式
    TOKEN=$($USE_SUDO docker logs napcat 2>&1 | grep 'WebUi Token' | grep -oP 'Token:\s*\K[a-f0-9]+' | tail -1)
    
    if [ -n "$TOKEN" ]; then
        echo -e "${GREEN}  - NapCat Token:   ${NC}$TOKEN"
    else
        echo -e "${YELLOW}  - NapCat Token:   ${NC}(未获取到，请稍后查看日志)"
    fi
    
    echo ""
    echo -e "${YELLOW}常用命令：${NC}"
    echo -e "  - 查看容器状态: ${GREEN}$USE_SUDO docker compose -f astrbot.yml ps${NC}"
    echo -e "  - 查看 AstrBot 日志: ${GREEN}$USE_SUDO docker logs -f astrbot${NC}"
    echo -e "  - 查看 NapCat 日志: ${GREEN}$USE_SUDO docker logs -f napcat${NC}"
    echo -e "  - 停止服务: ${GREEN}$USE_SUDO docker compose -f astrbot.yml down${NC}"
    echo -e "  - 重启服务: ${GREEN}$USE_SUDO docker compose -f astrbot.yml restart${NC}"
    echo ""
    echo -e "${YELLOW}提示：请执行以下命令查看 NapCat 日志并扫码登录 QQ${NC}"
    echo -e "      ${GREEN}$USE_SUDO docker logs -f napcat${NC}"
else
    echo -e "${RED}错误：容器启动失败，请检查日志${NC}"
    exit 1
fi
